package edu.dhu.leetcode.combination77;

import javax.xml.transform.Result;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author ：snow
 * @Date ：Created in 2020-10-08
 * @Description：
 * @Modified By：
 * 给定两个整数 n 和 k，返回 1 ... n 中所有可能的 k 个数的组合。
 *
 * 示例:
 *
 * 输入: n = 4, k = 2
 * 输出:
 * [
 *   [2,4],
 *   [3,4],
 *   [2,3],
 *   [1,2],
 *   [1,3],
 *   [1,4],
 * ]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/combinations
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @Version:
 */
public class Solution {
    private List<List<Integer>> ans = new ArrayList<List<Integer>>();
    private List<Integer> temp = new ArrayList<Integer>();
    public List<List<Integer>> combine(int n, int k) {

        return null;
    }

    /**
     *
     * @param cursor 游标
     * @param n
     * @param k
     */
    private void dfs(int cursor, int n, int k){
        if(temp.size() + (n - cursor) < k){
            return;
        }
        if (temp.size() == k){
            ans.add(new ArrayList<Integer>(temp));
            return;
        }
        // 处理当前递归
        //  需要当前
        temp.add(cursor);
        dfs(cursor + 1, n, k);

        // 不需要当前
        temp.remove(temp.size() - 1);
        dfs(cursor + 1, n, k);

    }


    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.dfs(1, 6, 3);
        System.out.println(solution.ans);
    }

}
